home *** CD-ROM | disk | FTP | other *** search
- Date: Wed, 29 Sep 93 23:31:38 GMT
- Message-Id: <984@falcon.demon.co.uk>
- From: alex@falcon.demon.co.uk (Alex Kiernan)
- To: mint@terminator.rs.itd.umich.edu
- Subject: Memory violation: free
- Lines: 85
-
- I've been having a lot of problems with some apps with the above memory
- violation. I finally got around to tracking it down today & it happens
- with apps which call the OS with less than 1K of supervisor stack free
- in the current page. 64 bytes seems a lot more reasonable than 1K to
- me since 64 bytes is around the size of the largest stack frame which
- the processor can generate. Whilst I was about it I fixed up a couple
- of other new problems I'd never encountered, but obviously could happen
- (wrong number of loop iterations).
-
- *** m:/context.spp Tue Jul 27 19:44:42 1993
- --- context.spp Wed Sep 29 14:50:38 1993
- ***************
- *** 104,109 ****
- --- 104,110 ----
- lea _framesizes,a3
- move.b 0(a3,d1.w),d1
- beq.s short1 ; if no data to save, skip this
- + subq.w #1,d1 ; correct for first time through loop
- bcint: move.w (a1)+,(a2)+ ; copy CPU internal state
- bcover: dbf d1,bcint
- short1:
- ***************
- *** 174,180 ****
-
- move.l C_SSP(a0),a1 ; get supervisor stack pointer
- tst.b (a1) ; touch the page for virtual memory programs
- ! tst.b -1023(a1) ; make sure stack can grow
- move.l a1,sp
- move.l C_USP(a0),a1
- move.l a1,usp ; set user stack pointer
- --- 175,181 ----
-
- move.l C_SSP(a0),a1 ; get supervisor stack pointer
- tst.b (a1) ; touch the page for virtual memory programs
- ! tst.b -63(a1) ; make sure stack can grow
- move.l a1,sp
- move.l C_USP(a0),a1
- move.l a1,usp ; set user stack pointer
- ***************
- *** 206,212 ****
- sub.w d1,sp
- sub.w d1,sp
- move.l sp,a2
- ! bra.s rcover
- rcint: move.w (a1)+,(a2)+
- rcover: dbf d1,rcint
- rcovernc:
- --- 207,213 ----
- sub.w d1,sp
- sub.w d1,sp
- move.l sp,a2
- ! subq.w #1,d1 ; correct for first time through loop
- rcint: move.w (a1)+,(a2)+
- rcover: dbf d1,rcint
- rcovernc:
- ***************
- *** 241,247 ****
-
- move.l C_SSP(a0),a1 ; get supervisor stack pointer
- tst.b (a1) ; touch the page for virtual memory programs
- ! tst.b -1023(a1) ; make sure stack can grow
- move.l a1,sp
- move.l C_USP(a0),a1
- move.l a1,usp ; set user stack pointer
- --- 242,248 ----
-
- move.l C_SSP(a0),a1 ; get supervisor stack pointer
- tst.b (a1) ; touch the page for virtual memory programs
- ! tst.b -63(a1) ; make sure stack can grow
- move.l a1,sp
- move.l C_USP(a0),a1
- move.l a1,usp ; set user stack pointer
- ***************
- *** 270,275 ****
- --- 271,277 ----
- sub.w d1,sp
- sub.w d1,sp
- move.l sp,a2
- + subq.w #1,d1 ; correct for first time through loop
- rcint2: move.w (a1)+,(a2)+
- rcover2: dbf d1,rcint2
- rcover2nc:
- --
- Alex Kiernan.
- alex@falcon.demon.co.uk
-